import mnb from '@mf2e/mnb'
import { log } from '@/utils/log'

/**
 * 发送fetch请求
 * @param {Object} config
 *  {
 *    url: 请求url
 *    method: 请求方法（默认get）
 *    params: get请求参数
 *    data: post请求参数
 *    headers: 请求头
 *    networkError: 是否展示网络错误
 *    errorToast: 检查是否显示错误提示函数
 *    noContent: 检查是否无内容函数
 *  }
 */
async function fetch(config = {}) {
  let res = {}

  console.log('fetch请求', config)
  try {
    log('------- net.request start -------')
    res = await mnb('net.request', Object.assign({ method: 'get' }, config))
    res = typeof res === 'string' ? JSON.parse(res) : res
    log('------- net.request end -------')
  } catch (e) {
    log('------- net.request error -------')
    if (config.errorToast?.() ?? config.method === 'post') {
      mnb('toast.show', { text: '网络请求错误' })
    }
    if (config.networkError ?? true) {
      e.networkError = true
    }
    log(e)
    throw e
  }
  console.log('fetch响应', JSON.stringify(res), config)

  // 处理无内容
  if (config.noContent?.(res.data) ?? (!res.data && res.code !== 0)) {
    // console.log('+++++++++++++++++++++++++++++++++++++++++++++++++++')
    log('------- net.request error2 -------')
    if (config.errorToast?.(res.code) ?? config.method === 'post') {
      mnb('toast.show', { text: res.message || '网络请求错误' })
    }
    // console.log(`res.message: ${res.message}`)
    log(res)
    const e = new Error(res.message)
    e.code = res.code
    e.noContent = true
    throw e
  }

  return res.data ?? {} // 保证返回数据不空
}
export default fetch
